<?php

/**
 * @copyright (c) 2011
 */
App::uses('AppModel', 'Model');

class User extends AppModel {

    var $name = 'User';

    # Validation rules.
    /* var $validate = array(
      'username' => array(
      'rule' => 'notEmpty',
      'required' => true,
      'message' => 'The Username must not be null and it is required',
      'last' => true
      ),
      'password' => array(
      'rule' => 'notEmpty',
      'required' => true,
      'message' => 'The Password must not be null and it is required'
      )
      ); */

    public function beforeSave($options = array()) {
        if (isset($this->data[$this->alias]['password'])) {
            $this->data[$this->alias]['password'] = AuthComponent::password($this->data[$this->alias]['password']);
        }
        return true;
    }

    public function save($data = null,$validate = true, $fieldList = array()) {
        $s = $this->sanitize($data);
        return parent::save($s);
    }


    /**
     * This function retrieves all the users from the database tables users.
     * @name getAllUsers
     * @param void
     * @return mixed. Array containing the data retrieved.
     * @access public
     */
    function getAllUsers() {
        # fetch the data and return it.
        return $this->find('all', array('conditions' => array('deleted' => 'n'), 'recursive' => -1));
    }

    /**
     * This function retrieves the user data based upon his/her id
     * @name getUserById
     * @param string $userId string holding the user id.his parameter is defaulted to null.
     * When it is null it means that cake is going to use the ActiveRecord system to retrieve the data.
     * @return mixed. Array containing the user data.
     * @access public
     */
    function getUserById($userId = null) {
        $conditions = array(
            'User.id' => $userId,
            'User.deleted' => 'n'
        );
        # fetch the specific data from the server and retrun it.
        return $this->find('first', array('conditions' => $conditions, 'recursive' => 1));
    }

    # User Data manipulation functions
    /**
     * This function retrieves the user by his login name
     * @name getUserByLoginName
     * @param string $loginName
     * @return array of data containing the login name and the user password
     * @access public
     */

    function getUserByLoginName($loginName = null) {
        # search condition
        $conditions = array(
            'User.username' => $loginName,
            'User.deleted' => 'n'
        );
        # fetch the specific data from the server and retrun it.
        return $this->find('first', array('conditions' => $conditions, 'recursive' => 1));
    }

}